import os
import sys

import logging
from os import makedirs
from os.path import dirname, exists


def spider_log(
        LOG_NAME="spider",
        LOG_FILE="log/spider.log",
        LOG_LEVEL="INFO",
        LOG_FORMAT=None,
        LOG_ENABLED=True,
        LOG_TO_CONSOLE=True,
        LOG_TO_FILE=True):
    """
    获取日志对象
    Args:
        :param LOG_FILE：string      日志保存地址，即日志路径
        :param LEVEL:  string       日志输出级别
        :param LOG_FORMAT: string   日志格式
        :param LOG_ENABLED: bool    是否开启日志
        :param LOG_TO_CONSOLE: bool 是否输出到控制台
        :param LOG_TO_FILE: bool    是否输出到文件
    Return:
        :return: 日志对象
    """

    # 创建一个logger
    logger = logging.getLogger(LOG_NAME)
    # 设置日志级别
    logger.setLevel(LOG_LEVEL)
    # 定义输出格式LOG_FORMAT
    if LOG_FORMAT == None:
        formatter = logging.Formatter('[%(asctime)s] - %(filename)s - [line:%(lineno)d] - [%(levelname)s]: %(message)s')
    else:
        formatter = logging.Formatter(LOG_FORMAT)

    # 输出到控制台
    if LOG_ENABLED and LOG_TO_CONSOLE:
        stream_handler = logging.StreamHandler(sys.stdout)
        stream_handler.setLevel(level=LOG_LEVEL)
        stream_handler.setFormatter(formatter)
        logger.addHandler(stream_handler)
        # 输出到文件

    if LOG_ENABLED and LOG_TO_FILE:
        LOG_PATH = os.getcwd() + "/{}".format(LOG_FILE)
        log_dir = dirname(LOG_PATH)
        if not exists(log_dir): makedirs(log_dir)  # 路径不存在就创建目录
        # 创建文件处理器
        file_handler = logging.FileHandler(LOG_PATH, encoding='utf-8')
        file_handler.setLevel(level=LOG_LEVEL)

        file_handler.setFormatter(formatter)
        # 给logger添加处理器
        logger.addHandler(file_handler)
    return logger
